iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0

Takeaway

  • useRef可以拿來傳參考,畢竟用了Reference嘛
  • 不想觸發渲染時:使用ref。所以在渲染期間讀取ref是沒用的
  • 如果直接更新useRef,不會被偵測到,是在做React管轄以外的互動,將造成副作用。所以我們會在事件處理函數或Effect裡讀取ref,並搭配使用
  • useRef就像沒有setter的useState
  • 但useState回傳的是陣列,useRef回傳的是物件
  • 受控組件:讓State成為單一資料源
  • 非受控組件:使用原始DOM或ref
  • ref的current屬性可以被點記法修改
  • ref適合timeout ID和DOM元素
  • 可以像.current.focus()這樣使用瀏覽器API
  • Hook只能在組件頂端調用,所以map裡不能包ref
  • 但是ref裡可以包著map!
  • ref callback:當ref對象會變化時,將函數傳遞給ref。譬如用ref包住map
  • ref callback跟拿來記憶函數,減少渲染的useCallback不一樣喔
  • 組件不能用ref,除非使用forwardRef暴露DOM節點
  • useImperativeHandle:限制暴露的只剩下控制代碼(Handle),而不是DOM節點。這時候能調用的就只剩下你設定的那個方法(如focus)
  • flushSync:強制DOM同步更新的最後手段,通常是和第三方程式碼(如UI函式庫或者瀏覽器API)整合時使用
  • 避免重複創建ref:初始化ref,加上if判斷:current是null的時候再執行
  • useState類似Vue的ref;useRef則是類似Vue的v-model,可拿來取得input的value

上一篇
【Day14】Context
下一篇
【Day16】Effect1
系列文
【現在學React還來得及嗎?】30天Takeaway分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言